/////////////////////////////////////////////////////////////////////////
// Timer.h - a timer class
// By: Troy Humphreys
/////////////////////////////////////////////////////////////////////////
#ifndef _TIMER_H_
#define _TIMER_H_
#pragma once

#include "windows.h"


/////////////////////////////////////////////////////////////////////////
// Timer
//
// A high-resolution timer.
/////////////////////////////////////////////////////////////////////////
class Timer
{
    private:
            // The start time.
            LARGE_INTEGER  startTime;

            // The frequncey
            LARGE_INTEGER freq;

    public:

        /////////////////////////////////////////////////////////////////////////
        // Constructor: 
        // Retrieves the frequency of the high-resolution performance counter.
        /////////////////////////////////////////////////////////////////////////
        Timer(void)
        {
            QueryPerformanceFrequency(&freq);
        }

        /////////////////////////////////////////////////////////////////////////
        // Destructor:
        /////////////////////////////////////////////////////////////////////////
        ~Timer(void){}

        /////////////////////////////////////////////////////////////////////////
        // Reset:
        // Retrieves the currrent count of the high-resolution performance counter.
        /////////////////////////////////////////////////////////////////////////
        void Reset(void)
        {
            QueryPerformanceCounter(&startTime);
        }

        /////////////////////////////////////////////////////////////////////////
        // GetElapsedTime:
        // Gets the difference in time.
        //
        // Returns:    float - the difference in time.
        /////////////////////////////////////////////////////////////////////////
        float GetElapsedTime(void)
        {
            LARGE_INTEGER curTime;
            QueryPerformanceCounter(&curTime);
            return (float)(curTime.QuadPart - startTime.QuadPart)/freq.QuadPart;
        }
};

#endif